package Terminal.TechnicalServices.Foundation;

import InterfacceCondivise.FdbClientPrxHelper;

/**
 * Carica un qualunque oggetto dal database utilizzando le funzioni dell'interfaccia di hibernate
 * Realizza la load di un oggetto data la classe e l'id di tale oggetto
 * @author Gruppo 6
 */
public class FDefaultLoadFactory extends FLoadFactory{
	
	private InterfacceCondivise.FdbClientPrxHelper fdb;
	private Terminal.TechnicalServices.TSIce iceComunicator;
	private Ice.Communicator ice;
	
	/**
	 * Costruttore della classe
	 * imposta la connessione tra lo stub e il servant tramite ICE
	 */
	public FDefaultLoadFactory()
	{
		iceComunicator = Terminal.TechnicalServices.TSIce.istanza();
		ice = iceComunicator.getIce();
		
		try 
		{
			Ice.ObjectPrx base = ice.stringToProxy("SimpleFdbClientFacadeI:" + iceComunicator.getParametriConnessione());
	        fdb = (FdbClientPrxHelper) InterfacceCondivise.FdbClientPrxHelper.checkedCast(base);
	        
	    	if (fdb == null)
	    		throw new Error("Invalid proxy");       
	        
		}
		catch (Ice.LocalException e) 
        {
            e.printStackTrace();
            iceComunicator.setStatus(1);
        } 
		catch (Exception e) 
		{
            System.err.println(e.getMessage());
            iceComunicator.setStatus(1);
        }
	}	
	
	/**
	 * Recupera l'oggetto della classe desiderata con parametro identificativo id
	 * 
	 * @Override
	 * @param classe classe dell'oggetto da caricare; serve per indicare da quale tabella del DB relazionale estrarre i dati
	 * @param id indica il parametro identificativo dell'oggetto 
	 * @return
	 */
	public Ice.Object load(String classe, int id) {
		
		Object loaded = fdb.load( classe, id);
		return (Ice.Object) loaded;
		
	}

}
